import axios from "axios";
import type {AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig} from 'axios'
// import { notification } from 'ant-design-vue' // 结合 ant-design-vue 做全局提示
// import store from '@/store' // 获取 token
import {localCache} from '@/utils/storage' // 引入读取token
import {logout} from "@/api/login"; // 引入退出登录方法
import {ElNotification} from 'element-plus'

// 初始化
const instance = axios.create({
    baseURL: '/api',
    timeout: 120 * 1000,
    // withCredentials: true
})


// 请求拦截器
instance.interceptors.request.use((config: InternalAxiosRequestConfig) => {
    // 获取系统 token
    const token: string | null = localCache.getCache('token');
    if (token) {
        // 确保 headers 不为 undefined
        config.headers = config.headers || {};
        config.headers['Authorization'] = `Bearer ${token}`; // 让每个请求携带自定义 token，请根据实际情况自行修改
    }
    // 配置 GET 接口默认参数携带时间戳请求
    if (config.method === 'get') {
        config.params = {
            _t: new Date().getTime(),
            ...config.params,
        };
    }
    return config;
}, (error) => {
    // 处理请求错误
    return Promise.reject(error);
});


// 拦截成功请求
instance.interceptors.response.use(
    (response: AxiosResponse) => {
        const config: AxiosRequestConfig = response.config || '';
        const code = Number(response.status);
        // 请求成功的状态码范围为 200 - 299
        if (code >= 200 && code < 300) {
            if (config) {
                console.log('请求成功');
            }
            return response.data;
        } else {
            console.log(response)
            // 对于请求失败的情况进行处理
            return Promise.reject(response);
        }
    },
    (error) => {
        // 请求失败的处理函数
        if (error.message.includes('timeout')) {
            ElNotification({title: '系统提示', message: '请求超时', type: 'error'});
        }
        if (error.response) {
            const data = error.response.data;
            const token = localCache.getCache('token');
            if (error.response.status == 400) {
                ElNotification({title: '系统提示', message: error.response.data.msg, type: 'error'});
            }
            if (error.response.status == 403) {
                ElNotification({title: '系统提示', message: '请求资源失败', type: 'error'});
            }
            if (error.response.status == 500) {
                ElNotification({title: '系统提示', message: '系统处理错误', type: 'error'});
            }
            if (error.response.status === 401 && !(data.result && data.result.isLogin)) {
                ElNotification({title: '系统提示', message: '没有访问权限,或者权限过期', type: 'error'});
                localCache.clearCache()

                setTimeout(() => {
                    window.location.reload();
                }, 100)
                // token 存在但是没有访问权限，退出登录
                // if (token) {
                //   logout();
                // }
            }
        }
        return Promise.reject(error);
    }
);


export default instance;
